package cn.jellybmedia.basic.controller;

import cn.jellybmedia.basic.utils.AjaxResult;
import cn.jellybmedia.basic.utils.FastdfsUtil;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


/**======================================================================================
* @Title:
* @Description: fastDFS接口类,主要作用于图片的上传与下载
* @Author: Mr.Zhang
* @Version: 1.0
* @Date:  2022/7/1 17:38
* @Parameters:
* @Return
======================================================================================*/
@RestController
@RequestMapping("/fastDFs")
public class FastdfsController {

   /**======================================================================================
   * @Title: upload
   * @Description: 文件上传接口
   * @Author: Mr.Zhang
   * @Version: 1.0
   * @Date:  2022/7/1 17:47
   * @Parameters: [file]
   * @Return cn.jellybmedia.basic.utils.AjaxResult
   ======================================================================================*/
   // 根据前端的请求方式,而且文件上传三要素必须要满足,请求方式必须要是post请求
   // @RequestPart:表名此次请求返回是复杂表单类型,接受的是复杂文件
   // value:接收文件的key值
   // required:指定的参数不能为空
   @PostMapping
   public AjaxResult upload(@RequestPart(value = "file", required = true) MultipartFile file){
      try {
          // 获取文件,传输文件一般都是用的byte数组,这个其实就是文件内容
          byte[] bytes = file.getBytes();

          // 获取文件的后缀名
          String extension = FilenameUtils.getExtension(file.getOriginalFilename());
          // 进行拼接
          String filePath = FastdfsUtil.upload(bytes,extension);
          return AjaxResult.getAjaxResult().setResultObj(filePath);
      }catch (Exception e){
          e.printStackTrace();
          return AjaxResult.error();
      }
   }


    /**======================================================================================
    * @Title: delete
    * @Description: 删除图片
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/1 18:03
    * @Parameters: [path]
    * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @DeleteMapping
    public AjaxResult delete(@RequestParam(value = "filePath", required = true) String filePath){
        try {
            // 因为上传的图片在Fastdfs中是通过卷和地址进行拼接在一起的,
            // 删除需要获取到卷名和地址进行分割.分割得到两个路径
            // 得到卷名
            String pathTmp = filePath.substring(1);
            String groupName = pathTmp.substring(0, pathTmp.indexOf("/"));

            // 得到图片的地址
            String removePath = pathTmp.substring(pathTmp.indexOf("/") + 1);

            // 调用工具类进行删除,传入图片组名和路径
            FastdfsUtil.delete(groupName,removePath);
            return AjaxResult.getAjaxResult();

        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error();
        }
    }

}